package com.dy.design_pattern_study.agent_factory.dome2.impl;

import com.dy.design_pattern_study.agent_factory.dome2.Subject;

/**
 * @CreateBy zhangdingyi
 * @Date 2023-03-20
 * @Content 功能代理类
 * 一般可以用在哪些场合？
 * 1.远程代理，也就是为一个对象在不同的地址空间提供局部代表。
 * 这样可以隐藏一个对象存在于不同地址空间的事实（隐藏地址，也就无法进行攻击）
 * 2.虚拟代理，是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象
 * 3.安全代理，用来控制真实对象访问时的权限
 * 4.智能指引，是指当调用真实的对象时，代理处理另外一些事
 * 简单的说，就是想用A的功能，又需要拓展A的功能，不能在A上面拓展（代理模式也可以保证安全）
 * 这时候代理模式就非常的有用了
 */
public class Proxy extends Subject {
    RealSubject realSubject;

    @Override
    public void Request() {
        if (realSubject == null) {
            realSubject = new RealSubject();
        }
        realSubject.Request();
    }

    public static void main(String[] args) {
        //也就是间接的通过 Proxy 来调用 RealSubject
        Proxy proxy = new Proxy();
        proxy.Request();
    }
}
